package com.biz.primus.ms.oms.service.delivery;

import com.biz.primus.base.vo.PageResult;
import com.biz.primus.model.oms.vo.OmsTimeoutRecordVo;
import com.biz.primus.model.oms.vo.TimeoutRecordHandleRequest;
import com.biz.primus.model.oms.vo.TimeoutRecordQueryVo;
import com.biz.primus.ms.oms.vo.OmsOrderResource;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * 订单配送状态监控服务
 *
 * @author yanweijin
 * @date 2017/11/24
 */
public interface DeliveryMonitoringService {


	/**
	 * 当oms新收到一个订单时,判断该订单是否需要将其添加到监控源
	 * @param order
	 */
	void filterMonitoredOrder(OmsOrderResource order);

	/**
	 * 扫描监控源,发现并记录超时订单
	 * 由定时任务来调用
	 * @param useJpaQuery 如果为true,应该通过数据库查询来发现超时订单, 一般10-20次false中穿插一次true, 为了防止redis数据丢失
	 */
	@Transactional(rollbackFor = Exception.class)
	void scanMonitoredSource(boolean useJpaQuery);

	/**
	 *
	 * 分页查询订单超时记录
	 *
	 * @return
	 */
	PageResult<OmsTimeoutRecordVo> queryTimeoutRecords(TimeoutRecordQueryVo query);

	/**
	 * 处理一条记录,分为三种行为:开始(begin),取消(cancel),完成(finish)
	 *
	 * @param req
	 */
	@Transactional(rollbackFor = Exception.class)
	void handleRecord(TimeoutRecordHandleRequest req);


}
